package org.hiucung.orangeappupdater;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import org.hiucung.orangeappupdater.updater.AppUpdater;
import org.hiucung.orangeappupdater.updater.bean.DownloadBean;
import org.hiucung.orangeappupdater.updater.net.INetCallBack;
import org.hiucung.orangeappupdater.updater.net.INetDownloadCallBack;
import org.hiucung.orangeappupdater.updater.ui.UpdateVersionShowDialog;
import org.hiucung.orangeappupdater.updater.utils.AppUtils;

import java.io.File;

/**
 * 应用内版本更新，使用okhttp网络框架实现get请求，download下载以及通过calls队列取消任务的方法
 * 优化点：
 * 1、当应用已经下载好时，通过本地的文件与服务器文件的MD5值作对比，
 *  文件存在且MD5值相同即曾经下载好过，不需要再去下载，直接安装即可
 * 2、利用http，实现多线程断电续下。再合成
 * 3、增量更新 bsdiff
 *
 */
public class MainActivity extends AppCompatActivity {

    Button mBtnUpdater;//activity的一个检查更新的按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mBtnUpdater = findViewById(R.id.bt_update);

        mBtnUpdater.setOnClickListener(v -> {
            //1 先发get请求，拿到json数据
            AppUpdater.getInstance().getNetManager().get("http://59.110.162.30/app_updater_version.json", new INetCallBack() {
                @Override
                public void success(String response) {

                    Log.d("hiucung", "response = " + response);
                    //1 解析json
                    //{
                    //    "title":"4.5.0更新啦！",
                    //    "content":"1. 优化了阅读体验；\n2. 上线了 hyman 的课程；\n3. 修复了一些已知问题。",
                    //    "url":"http://59.110.162.30/v450_imooc_updater.apk",
                    //    "md5":"14480fc08932105d55b9217c6d2fb90b",
                    //    "versionCode":"450"
                    //}
                    //2 做版本匹配
                    //3 弹框
                    //4 点击下载

                    //从服务中的取出数据放入bean中
                    DownloadBean bean = DownloadBean.parse(response);

                    //有可能服务器并没有返回数据，需要判空
                    if (bean == null) {
                        Toast.makeText(MainActivity.this, "版本检测接口返回数据异常", Toast.LENGTH_SHORT).show();
                        return;
                    }

                    //检测 ：对比版本号是否需要弹框
                    try {
                        long versionCode = Long.parseLong(bean.versionCode);
                        if (versionCode <= AppUtils.getVersionCode(MainActivity.this)) {
                            Toast.makeText(MainActivity.this, "当前版本已经是最新版本", Toast.LENGTH_SHORT).show();
                            return;
                        }

                    } catch (NumberFormatException e) {
                        e.printStackTrace();
                        Toast.makeText(MainActivity.this, "版本检测接口返回版本号异常", Toast.LENGTH_SHORT).show();
                        return;
                    }

                    //弹框
                    UpdateVersionShowDialog.show(MainActivity.this, bean);

                }

                @Override
                public void failed(Throwable throwable) {
                    throwable.printStackTrace();
                    Toast.makeText(MainActivity.this, "版本更新接口请求失败", Toast.LENGTH_SHORT).show();
                }
            },MainActivity.this);
        });

    }

    //当用户主动销毁程序时，下载任务也要中断
    @Override
    protected void onDestroy() {
        super.onDestroy();
        AppUpdater.getInstance().getNetManager().cancel(this);
    }
}